home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga News 95
/
Amiga News 95.iso
/
dpat
/
dpat86
/
bm
/
bordermaker.p
< prev
next >
Wrap
Text File
|
1994-06-12
|
25KB
|
796 lines
pROGRAM BorderMaker;
{$I "include:libraries/reqtools.i"}
{$I "include:utils/stringlib.i"}
{$I "include:utils/CycleGad.i"}
{$I "include:utils/PCQMemory.i"}
CONST
STDFont : textAttr = ("topaz.font",8,FS_NORMAL,FPF_ROMFONT);
UDRFont : textattr = ("topaz.font",8,FSF_UNDERLINED,FPF_ROMFONT);
StdInName : Address = Nil; {Pour ne pas avoir de fenêtre lors}
StdOutName: Address = Nil; {de l'execution à partir du WB}
{Fenêtre des opérations}
win : NewWindow = (0,0,374,120,-1,-1,GADGETDOWN_f + GADGETUP_f + CLOSEWINDOW_f + RAWKEY_f,
WINDOWDRAG + WINDOWDEPTH + WINDOWCLOSE + ACTIVATE,
nil,nil,"BorderMaker v1.0r",nil,nil,-1,-1,-1,-1,
WBENCHSCREEN_f);
{Paires de points pour le nom du fichier et le nom de la structure}
FSOpairs1 : array[1..3,1..2] of short = ((-5,10),(-5,-3),(243,-3));
FSOpairs2 : array[1..3,1..2] of short = ((-4,9),(-4,-3),(243,-3));
FSOpairs3 : array[1..3,1..2] of short = ((-4,10),(244,10),(244,-3));
FSOpairs4 : array[1..3,1..2] of short = ((-4,10),(243,10),(243,-2));
FSOborder4 : border = (0,0,1,0,JAM2,3,@FSOpairs4,nil);
FSOborder3 : border = (0,0,1,0,JAM2,3,@FSOpairs3,@FSOborder4);
FSOborder2 : border = (0,0,2,0,JAM2,3,@FSOpairs2,@FSOborder3);
FSOborder1 : border = (0,0,2,0,JAM2,3,@FSOpairs1,@FSOborder2);
FSIpairs1 : array[1..3,1..2] of short = ((-3,9),(-3,-2),(241,-2));
FSIpairs2 : array[1..3,1..2] of short = ((-2,8),(-2,-2),(241,-2));
FSIpairs3 : array[1..3,1..2] of short = ((-2,9),(242,9),(242,-2));
FSIpairs4 : array[1..3,1..2] of short = ((-2,9),(241,9),(241,-1));
FSIborder4 : border = (0,0,2,0,JAM2,3,@FSIpairs4,@FSOBorder1);
FSIborder3 : border = (0,0,2,0,JAM2,3,@FSIpairs3,@FSIborder4);
FSIborder2 : border = (0,0,1,0,JAM2,3,@FSIpairs2,@FSIborder3);
FSIborder1 : border = (0,0,1,0,JAM2,3,@FSIpairs1,@FSIborder2);
{Pour les 'STRGADGET', gadgets de chaînes, il est nécéssaire de décaler
de quelques pixels vers le haut et vers la droite les bords, sinon
le texte empiéte dessus. De même, il est nécéssaire de declarer la
longueur et la largeur du gadget plus petit que réelle du fait du
décalage : la zone d'activation du gadget sera décalée vers le bas
et vers la droite d'autant que les bords en haut et à gauche le sont}
{Gadget pour le nom du fichier}
FInfo : StringInfo = ("\0 ",
"\0 ",
0,200,0,0,0,0,0,0,nil,0,nil);
{Pour la stucture StringInfo, toujours procéder de la même maniére :
si votre gadget contient au maximum x caractéres, mettre le champs
'MaxChars' à x, et mettre dans 'Buffer' et 'UndoBuffer' un nombre
caractére egal à x, le '\0' compris dans x. '\0' est obligatoire.
Il faut mettre tout les autres champs à 0 ou 'nil'
TOUT AUTRE FORME D'INITIALISATION APPELLE LE GURU}
FText0 : intuitext = (1,0,JAM2,-57,-5,@STDFont,"Nom du",nil);
FText1 : intuitext = (1,0,JAM2,-57,4,@STDFont,"ichier",@FText0);
FText2 : intuitext = (1,0,JAM2,-65,4,@UDRFont,"F",@FText1);
F : Gadget = (nil,105,19,242,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE,
STRGADGET,@FSIBorder1,nil,@FText2,0,@FInfo,1,nil);
{Gadget pour le nom de la strucure}
SInfo : StringInfo = ("\0 ",
"\0 ",
0,46,0,0,0,0,0,0,nil,0,nil);
SText0 : intuitext = (1,0,JAM2,-81,-5,@STDFont,"Nom de la",nil);
SText1 : intuitext = (1,0,JAM2,-73,4,@STDFont,"tructure",@SText0);
SText2 : intuitext = (1,0,JAM2,-81,4,@UDRFont,"S",@SText1);
S : Gadget = (nil,105,38,242,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE,
STRGADGET,@FSIBorder1,nil,@SText2,0,@SInfo,2,nil);
{Paires de points pour la longueur, la largeur, l'offset en X et
l'offset en Y}
LHOpairs1 : array[1..3,1..2] of short = ((-5,10),(-5,-3),(36,-3));
LHOpairs2 : array[1..3,1..2] of short = ((-4,9),(-4,-3),(36,-3));
LHOpairs3 : array[1..3,1..2] of short = ((-4,10),(37,10),(37,-3));
LHOpairs4 : array[1..3,1..2] of short = ((-4,10),(36,10),(36,-2));
LHOborder4 : border = (0,0,1,0,JAM2,3,@LHOpairs4,nil);
LHOborder3 : border = (0,0,1,0,JAM2,3,@LHOpairs3,@LHOborder4);
LHOborder2 : border = (0,0,2,0,JAM2,3,@LHOpairs2,@LHOborder3);
LHOborder1 : border = (0,0,2,0,JAM2,3,@LHOpairs1,@LHOborder2);
LHIpairs1 : array[1..3,1..2] of short = ((-3,9),(-3,-2),(34,-2));
LHIpairs2 : array[1..3,1..2] of short = ((-2,8),(-2,-2),(34,-2));
LHIpairs3 : array[1..3,1..2] of short = ((-2,9),(35,9),(35,-2));
LHIpairs4 : array[1..3,1..2] of short = ((-2,9),(34,9),(34,-1));
LHIborder4 : border = (0,0,2,0,JAM2,3,@LHIpairs4,@LHOBorder1);
LHIborder3 : border = (0,0,2,0,JAM2,3,@LHIpairs3,@LHIborder4);
LHIborder2 : border = (0,0,1,0,JAM2,3,@LHIpairs2,@LHIborder3);
LHIborder1 : border = (0,0,1,0,JAM2,3,@LHIpairs1,@LHIborder2);
{Gadget de longueur de structure}
LInfo : StringInfo = ("100\0",
" \0",
0,4,0,0,0,0,0,0,nil,100,nil);
{Pour un STRGADGET du type LONGINT, cad qui contient uniquement un
nombre, il est preferable d'initialiser tout de suite le champs
'LongInt'}
LText0 : intuitext = (1,0,JAM2,-65,0,@STDFont,"ongueur",nil);
LText : intuitext = (1,0,JAM2,-73,0,@UDRFont,"L",@LText0);
L : Gadget = (nil,225,58,32,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE + LONGINT,
STRGADGET,@LHIBorder1,nil,@LText,0,@LInfo,3,nil);
{Gadget de hauteur de structure}
HInfo : StringInfo = ("100\0",
" \0",
0,4,0,0,0,0,0,0,nil,100,nil);
HText0 : intuitext = (1,0,JAM2,-65,0,@UDRFont,"H",nil);
HText : intuitext = (1,0,JAM2,-57,0,@STDFont,"auteur",@HText0);
H : Gadget = (nil,225,77,32,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE + LONGINT,
STRGADGET,@LHIBorder1,nil,@HText,0,@HInfo,4,nil);
OText : intuitext = (1,0,JAM2,-62,0,@STDFont,"Offset",nil);
XText : intuitext = (1,0,JAM2,-14,0,@UDRFont,"X",@OText);
YText : intuitext = (1,0,JAM2,-14,0,@UDRFont,"Y",@OText);
{Gadget d'offset en X}
XOInfo : StringInfo = ("0\0 ",
" \0",
0,4,0,0,0,0,0,0,nil,0,nil);
XO : Gadget = (nil,327,58,32,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE + LONGINT,
STRGADGET,@LHIBorder1,nil,@XText,0,@XOInfo,5,nil);
{Gadget d'offset en Y}
YOInfo : StringInfo = ("0\0 ",
" \0",
0,4,0,0,0,0,0,0,nil,0,nil);
YO : Gadget = (nil,327,77,32,8,GADGHCOMP,RELVERIFY + GADGIMMEDIATE + LONGINT,
STRGADGET,@LHIBorder1,nil,@YText,0,@YOInfo,6,nil);
{Paires de points pour le gadget de choix du type de structure}
Tpairs1 : array[1..3,1..2] of short = ((0,13),(0,0),(55,0));
Tpairs2 : array[1..3,1..2] of short = ((1,12),(1,0),(55,0));
Tpairs3 : array[1..3,1..2] of short = ((1,13),(56,13),(56,0));
Tpairs4 : array[1..3,1..2] of short = ((1,13),(55,13),(55,1));
Tborder4 : border = (0,0,1,0,JAM2,3,@Tpairs4,@Cyclebord1);
Tborder3 : border = (0,0,1,0,JAM2,3,@Tpairs3,@Tborder4);
Tborder2 : border = (0,0,2,0,JAM2,3,@Tpairs2,@Tborder3);
Tborder1 : border = (0,0,2,0,JAM2,3,@Tpairs1,@Tborder2);
HLTborder4 : border = (0,0,2,0,JAM2,3,@Tpairs4,@Cyclebord1);
HLTborder3 : border = (0,0,2,0,JAM2,3,@Tpairs3,@HLTborder4);
HLTborder2 : border = (0,0,1,0,JAM2,3,@Tpairs2,@HLTborder3);
HLTborder1 : border = (0,0,1,0,JAM2,3,@Tpairs1,@HLTborder2);
{Données pour le gadget de choix du type de structures}
IN1_T : intuitext = (1,0,JAM2,22,3,@STDFont,"IN1",nil);
IN2_T : intuitext = (1,0,JAM2,22,3,@STDFont,"IN2",nil);
OUT1_T : intuitext = (1,0,JAM2,22,3,@STDFont,"OUT1",nil);
OUT2_T : intuitext = (1,0,JAM2,22,3,@STDFont,"OUT2",nil);
CGT4 : CycleGad_Text = (@OUT2_T,4,nil);
CGT3 : CycleGad_Text = (@OUT1_T,3,@CGT4);
CGT2 : CycleGad_Text = (@IN2_T,2,@CGT3);
CGT1 : CycleGad_Text = (@IN1_T,1,@CGT2);
{Gadget de choix du type de structure}
CGTg : gadget = (nil,92,64,57,14,GADGHIMAGE,RELVERIFY+GADGIMMEDIATE,
BOOLGADGET,@Tborder1,@HLTborder1,@IN1_T,0,nil,7,@CGT1);
TText0 : intuitext = (1,0,JAM2,8,63,@UDRFont,"T",nil);
TText1 : intuitext = (1,0,JAM2,16,63,@STDFont,"ype de la",@TText0);
TText2 : intuitext = (1,0,JAM2,16,72,@STDFont,"Structure",@TText1);
{Paires de points pour le gadget d'écriture}
Epairs1 : array[1..3,1..2] of short = ((0,13),(0,0),(94,0));
Epairs2 : array[1..3,1..2] of short = ((1,12),(1,0),(94,0));
Epairs3 : array[1..3,1..2] of short = ((1,13),(95,13),(95,0));
Epairs4 : array[1..3,1..2] of short = ((1,13),(94,13),(94,1));
Eborder4 : border = (0,0,1,0,JAM2,3,@Epairs4,nil);
Eborder3 : border = (0,0,1,0,JAM2,3,@Epairs3,@Eborder4);
Eborder2 : border = (0,0,2,0,JAM2,3,@Epairs2,@Eborder3);
Eborder1 : border = (0,0,2,0,JAM2,3,@Epairs1,@Eborder2);
Ehlborder4 : border = (0,0,2,0,JAM2,3,@Epairs4,nil);
Ehlborder3 : border = (0,0,2,0,JAM2,3,@Epairs3,@Ehlborder4);
Ehlborder2 : border = (0,0,1,0,JAM2,3,@Epairs2,@Ehlborder3);
Ehlborder1 : border = (0,0,1,0,JAM2,3,@Epairs1,@Ehlborder2);
{ Gadget d'écriture }
EText0 : intuitext = (1,0,JAM2,25,3,@UDRFont,"E",nil);
EText : intuitext = (1,0,JAM2,33,3,@STDFont,"crire",@EText0);
E : gadget = (nil,40,93,96,14,GADGHIMAGE,RELVERIFY+GADGIMMEDIATE,
BOOLGADGET,@Eborder1,@Ehlborder1,@EText,0,nil,8,nil);
{ Gadget de complement }
CText0 : intuitext = (1,0,JAM2,9,3,@UDRFont,"C",nil);
CText : intuitext = (1,0,JAM2,17,3,@STDFont,"omplement",@CText0);
C : gadget = (nil,228,93,96,14,GADGHIMAGE,RELVERIFY+GADGIMMEDIATE,
BOOLGADGET,@Eborder1,@Ehlborder1,@CText,0,nil,9,nil);
{Chaînes de caractéres pour l'écriture}
strpairs : array[1..3,1..2] of string = ( (",","),(") , (",","),(") , (",","));"));
deb : string = " ";
ReqErr0 : intuitext = (0,1,JAM2,71,10,@STDFont,"J'ai besoin de la",nil);
ReqErr1 : intuitext = (0,1,JAM2,75,20,@STDFont,"ReqTools library",@ReqErr0);
ReqErr2 : intuitext = (0,1,JAM2,71,30,@STDFont," V38 ou plus ",@ReqErr1);
WinErr0 : intuitext = (0,1,JAM2,75,10,@STDFont," Je ne peut pas ",nil);
WinErr1 : intuitext = (0,1,JAM2,71,20,@STDFont,"ouvrir de fenêtre",@WinErr0);
WinErr2 : intuitext = (0,1,JAM2,71,30,@STDFont," Intuition!! ",@WinErr1);
Okay : intuitext = (0,1,JAM2,6,3,@STDFont,"Continuer",nil);
VAR
w : windowptr;
im : intuimessageptr;
quit,ok : boolean;
mode : integer;
filename : string;
filereq : rtfilerequesterptr;
mytag : reqtaglistptr;
PROCEDURE Ecrire;
VAR
fh : filehandle;
fl : filelock;
derr,i,j,
k,front,ret : integer;
s : string;
ok : boolean;
t : array[1..4,1..3,1..2] of short;
PROCEDURE compose_tab(x,y : integer);
{Ici, on compose le tableau t qui contient les paires de points.
Pourquoi x et y?
A droite et à gauche, les bords occupent deux pixels,
en haut et en bas, 1 pixel.
C'est pourquoi, pour les types 'In2' et 'Out2', il faut décaler
de deux pixels vers le bas, deux pixels vers le haut, 1 vers la
droite et un vers la gauche!}
BEGIN
t[1,1,1] := xoinfo.longint + x;
t[1,1,2] := yoinfo.longint + hinfo.longint - y - 1;
t[1,2,1] := xoinfo.longint + x;
t[1,2,2] := yoinfo.longint + y;
t[1,3,1] := xoinfo.longint + linfo.longint - 2 - x;
t[1,3,2] := yoinfo.longint + y;
t[2,1,1] := xoinfo.longint + 1 + x;
t[2,1,2] := yoinfo.longint + hinfo.longint - 2 - y;
t[2,2,1] := xoinfo.longint + 1 + x;
t[2,2,2] := yoinfo.longint + y;
t[2,3,1] := xoinfo.longint + linfo.longint - 2 - x;
t[2,3,2] := yoinfo.longint + y;
t[3,1,1] := xoinfo.longint + 1 + x;
t[3,1,2] := yoinfo.longint + hinfo.longint - y - 1;
t[3,2,1] := xoinfo.longint + linfo.longint - x - 1;
t[3,2,2] := yoinfo.longint + hinfo.longint - y - 1;
t[3,3,1] := xoinfo.longint + linfo.longint - x - 1;
t[3,3,2] := yoinfo.longint + y;
t[4,1,1] := xoinfo.longint + 1 + x;
t[4,1,2] := yoinfo.longint + hinfo.longint - y - 1;
t[4,2,1] := xoinfo.longint + linfo.longint - 2 - x;
t[4,2,2] := yoinfo.longint + hinfo.longint - y - 1;
t[4,3,1] := xoinfo.longint + linfo.longint - 2 - x;
t[4,3,2] := yoinfo.longint + 1 + y;
END;
BEGIN
k := rtsetwaitpointer(w);
s := allocstring(10);
deb[0] := chr(10);
derr := 0;
fl := lock(FInfo.buffer,SHARED_LOCK);
if fl<>nil then
begin
unlock(fl);
mytag^[0].ti_tag := RT_Underscore;
mytag^[0].ti_data := integer('_');
mytag^[1].ti_tag := TAG_END;
ret := rtEZRequestA("Le fichier\n%s\nexiste. Faut-il",
" le _Remplacer | faire _Suivre | _Annuler ",nil,@FInfo.buffer,mytag);
case ret of
1: fh := dosopen(FInfo.buffer,MODE_NEWFILE);
2: fh := dosopen(FInfo.buffer,MODE_OLDFILE);
3: begin clearpointer(w); return; end;
end;
end
else
fh := dosopen(FInfo.buffer,MODE_NEWFILE);
IF fh=nil THEN
BEGIN
clearpointer(w);
derr := ioerr;
mytag^[0].ti_tag := RT_Underscore;
mytag^[0].ti_data := integer('_');
mytag^[1].ti_tag := TAG_END;
ret := rtEZRequestA("Erreur Systême\n%ld",
" _Continuer ",nil,@derr,mytag);
freestring(s);
return;
END
ELSE
BEGIN
derr := seek(fh,0,OFFSET_END);
if ret=2 then
derr := doswrite(fh,"\n",1);
compose_tab(0,0);
FOR k := 1 TO 4 DO {Un seul tableau nous permet l'usage d'une boucle}
BEGIN {Pour écrire les paires de points}
{On prend comme nom de structrure 'Essai' pour commenter pas à pas
ce qu'on écrite dans le fichier}
{'\n' correspond au code ASCII 10}
derr := doswrite(fh,deb,4); {"\n "}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Pairs",5); {"Pairs"}
derr := inttostr(s,k);
derr := doswrite(fh,s,1); {"1"/"2"/"3"/"4"}
derr := doswrite(fh," :array[1..3,1..2] of short = ((",32);
{" : array[1..3,1..2] of short = (("}
FOR i := 1 TO 3 DO
FOR j := 1 TO 2 DO
BEGIN
derr := inttostr(s,t[k,i,j]); {On écrit ici les paires de}
derr := doswrite(fh,s,strlen(s)); {Points definies précedemment}
derr := doswrite(fh,strpairs[i,j],strlen(strpairs[i,j]));
END;
END;
derr := doswrite(fh,deb,1); {"\n"}
IF ( (mode = 2) OR (mode = 4) ) THEN {mode 2 : 'In2' - mode 4 : 'Out2'}
BEGIN
compose_tab(2,1); {On compose en décalant}
FOR k := 1 TO 4 DO
BEGIN
derr := doswrite(fh,deb,4); {"\n "}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Pairs",5); {"Pairs"}
derr := doswrite(fh,"In",2); {"In"}
derr := inttostr(s,k);
derr := doswrite(fh,s,1); {"1"/"2"/"3"/"4"}
derr := doswrite(fh," :array[1..3,1..2] of short = ((",32);
{" : array[1..3,1..2] of short = (("}
FOR i := 1 TO 3 DO
FOR j := 1 TO 2 DO
BEGIN
derr := inttostr(s,t[k,i,j]); {On écrit ici les paires de}
derr := doswrite(fh,s,strlen(s));{Points definies précedemment}
derr := doswrite(fh,strpairs[i,j],strlen(strpairs[i,j]));
END;
END;
derr := doswrite(fh,deb,1); {"\n"}
FOR i := 4 DOWNTO 1 DO
BEGIN
IF (
((i = 4) AND (mode = 4))
OR
((i = 2) AND (mode = 2))
)
THEN
front := 1
ELSE
IF (
((i = 4) AND (mode = 2))
OR
((i = 2) AND (mode = 4))
)
THEN
front := 2;
derr := doswrite(fh,deb,4); {"\n "}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Border",6); {"Border"}
derr := doswrite(fh,"In",2); {"In"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh," : border = (0,0,",17); {" : border = (0,0,"}
derr := inttostr(s,front);
derr := doswrite(fh,s,derr); {Couleur du dessin}
derr := doswrite(fh,",0",2); {",0" 0 ->Couleur du fond du dessin}
derr := doswrite(fh,",JAM2,3,@",9); {",JAM2,3,@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"pairs",5); {"pairs"}
derr := doswrite(fh,"In",2); {"In"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh,",",1); {","}
IF i=4 THEN {i = 4 ==> rien avant}
derr := doswrite(fh,"nil",3) {"nil"}
ELSE {sinon}
BEGIN
derr := doswrite(fh,"@",1); {"@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer));{"Essai"}
derr := doswrite(fh,"BorderIn",8); {"BorderIn"}
derr := inttostr(s,i+1);
derr := doswrite(fh,s,derr); {"3"/"2"/"1"}
END;
derr := doswrite(fh,");",2); {");"}
END;
derr := doswrite(fh,deb,1); {"\n"}
END;
FOR i := 4 DOWNTO 1 DO
BEGIN
IF (
( (i = 4) AND ((mode = 3) OR (mode=2)) )
OR
( (i = 2) AND ((mode = 1) OR (mode=4)) )
)
THEN
front := 1
ELSE
IF (
( (i = 4) AND ((mode = 1) OR (mode=4)) )
OR
( (i = 2) AND ((mode = 2) OR (mode=3)) )
)
THEN
front := 2;
derr := doswrite(fh,deb,4); {"\n "}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Border",6); {"Border"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh," : border = (0,0,",17); {" : border = (0,0,"}
derr := inttostr(s,front);
derr := doswrite(fh,s,derr); {Couleur du dessin}
derr := doswrite(fh,",0",2); {",0" 0 ->Couleur du fond du dessin}
derr := doswrite(fh,",JAM2,3,@",9); {",JAM2,3,@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"pairs",5); {"pairs"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh,",",1);
IF (
(i = 4)
AND
((mode = 1) OR (mode = 3))
)
THEN
derr := doswrite(fh,"nil",3) {"nil"}
ELSE
IF (
(i = 4)
AND
((mode = 2) OR (mode = 4))
)
THEN
BEGIN
derr := doswrite(fh,"@",1); {"@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"BorderIn",8); {"BorderIn"}
derr := inttostr(s,1);
derr := doswrite(fh,s,derr); {"3"/"2"/"1"}
END
ELSE
BEGIN
derr := doswrite(fh,"@",1); {"@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Border",6); {"Border"}
derr := inttostr(s,i+1);
derr := doswrite(fh,s,derr); {"3"/"2"/"1"}
END;
derr := doswrite(fh,");",2); {");"}
END;
IF C.flags = GADGHIMAGE + SELECTED THEN
BEGIN
derr := doswrite(fh,deb,1); {"\n"}
FOR i := 4 DOWNTO 1 DO
BEGIN
IF (
( (i = 4) AND (mode = 1) )
OR
( (i = 2) AND (mode = 3) )
)
THEN
front := 1
ELSE
IF (
( (i = 4) AND (mode = 3) )
OR
( (i = 2) AND (mode = 1) )
)
THEN
front := 2;
derr := doswrite(fh,deb,4); {"\n "}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"Border",6); {"Border"}
derr := doswrite(fh,"HL",2); {"HL"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh," : border = (0,0,",17); {" : border = (0,0,"}
derr := inttostr(s,front);
derr := doswrite(fh,s,derr); {Couleur du dessin}
derr := doswrite(fh,",0",2); {",0" 0 ->Couleur du fond du dessin}
derr := doswrite(fh,",JAM2,3,@",9); {",JAM2,3,@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer)); {"Essai"}
derr := doswrite(fh,"pairs",5); {"pairs"}
derr := inttostr(s,i);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"/"1"}
derr := doswrite(fh,",",1);
IF
(i = 4)
THEN
derr := doswrite(fh,"nil",3) {"nil"}
ELSE
BEGIN
derr := doswrite(fh,"@",1); {"@"}
derr := doswrite(fh,SInfo.buffer,strlen(SInfo.buffer));{"Essai"}
derr := doswrite(fh,"BorderHL",8); {"BorderHL"}
derr := inttostr(s,i+1);
derr := doswrite(fh,s,derr); {"4"/"3"/"2"}
END;
derr := doswrite(fh,");",2); {");"}
END;
END;
END;
freestring(s);
dosclose(fh);
clearpointer(w);
END;
PROCEDURE ouvre_tout;
VAR
cond : boolean;
BEGIN
RTBase := ReqToolsBasePtr(OpenLibrary(REQTOOLSNAME,REQTOOLSVERSION));
IF RTBase=nil THEN
BEGIN
cond := autorequest(w,@ReqErr2,@Okay,@Okay,REQGADGET,REQGADGET,300,80);
exit(20);
END;
w := openwindow(@win);
IF w=nil THEN
BEGIN
cond := autorequest(w,@WinErr2,@Okay,@Okay,REQGADGET,REQGADGET,300,80);
exit(20);
END;
quit := false;
filename := allocstring(108);
strcpy(filename,"");
GetMem(mytag,sizeof(reqtaglistptr));
CGT4.next := @CGT1;
if addgadget(w,@S,-1) = 0 then;
if addgadget(w,@F,-1) = 0 then;
if addgadget(w,@CGTg,-1) = 0 then;
if addgadget(w,@L,-1) = 0 then;
if addgadget(w,@H,-1) = 0 then;
if addgadget(w,@XO,-1) = 0 then;
if addgadget(w,@YO,-1) = 0 then;
if addgadget(w,@E,-1) = 0 then;
if addgadget(w,@C,-1) = 0 then;
refreshgadgets(w^.firstgadget,w,nil);
printitext(w^.rport,@TText2,0,0);
mode := 1;
END;
PROCEDURE ChgTyp;
BEGIN {Changement de mode}
CG_CycleText(CGTg,w);
mode := CG_GetId(CGTg);
IF ((mode = 2) OR (mode = 4)) THEN
IF (C.flags = GADGHIMAGE + SELECTED) THEN
BEGIN {Deselection de la complementarité si besoin est}
C.flags := GADGHIMAGE;
refreshgadgets(@C,w,nil);
END;
END;
PROCEDURE Complemente;
BEGIN {On selectionne ou deselectionne la complementarité}
mode := CG_GetId(CGTg);
IF ((mode = 1) OR (mode = 3)) THEN
IF C.flags = GADGHIMAGE THEN
C.flags := GADGHIMAGE + SELECTED { Selection}
ELSE
C.flags := GADGHIMAGE; {DeSelection}
END;
PROCEDURE FReq;
VAR
ret : integer;
BEGIN
filereq := Address(rtAllocRequestA (RT_FILEREQ, NIL));
IF filereq<>nil THEN
BEGIN
mytag^[0].ti_tag := RT_Window;
mytag^[0].ti_data := integer(w);
mytag^[1].ti_tag := RT_LockWindow;
mytag^[1].ti_data := integer(TRUE);
mytag^[2].ti_tag := TAG_END;
ret := rtFileRequestA(filereq,filename,"Choisissez un fichier",mytag);
IF ret = 1 THEN
BEGIN
strcpy(FInfo.buffer,filereq^.dir);
strcat(FInfo.buffer,filename);
refreshgadgets(@F,w,nil);
END;
ret := rtFreeRequest(filereq);
END;
END;
FUNCTION EndReq:boolean;
VAR
ret : integer;
endtag : reqtaglistptr;
BEGIN
mytag^[0].ti_tag := RT_Underscore;
mytag^[0].ti_data := integer('_');
mytag^[1].ti_tag := TAG_END;
ret := rtEZRequestA("Etes-vous sûr de vouloir\nquitter BorderMaker",
" _Continuer | Oh _Non ",nil,nil,mytag);
IF ret = 1 THEN
EndReq := true
ELSE
EndReq := false;
END;
PROCEDURE Puis_Je_Ecrire;
BEGIN
WHILE strcmp(FInfo.buffer,"")=0 DO
FReq;
ecrire;
END;
BEGIN
ouvre_tout;
REPEAT
im := intuimessageptr(waitport(w^.userport)); {On attend un message}
im := intuimessageptr(getmsg(w^.userport));{Quand il y en a un, on le recupére}
CASE im^.class OF
CLOSEWINDOW_f : {Crapoto basta fuite : au revoir}
quit := EndReq;
{Un petit requester pour verifier si la sortie est voulue...}
GADGETUP_f : BEGIN
CASE gadgetptr(im^.iaddress)^.gadgetid of
7 : ChgTyp; {On change le type}
{ Pour les 'STRGADET', le code 'GADGETUP_f' correspond à l'appui sur la}
{touche 'Return' ou la touche 'Enter'. On active donc le 'STRGADGET' qui}
{ vient le plus logiquement après.}
1 : ok := activategadget(@S,w,nil);
{On sort du nom de fichier, on rentre dans le nom de la structure}
2 : ok := activategadget(@L,w,nil);
{On sort du nom de structure, on rentre dans la longueur}
3 : ok := activategadget(@XO,w,nil);
{On sort de la longueur, on rentre dans l'offset en X}
5 : ok := activategadget(@H,w,nil);
{On sort de l'offset en X, on rentre dans la hauteur}
4 : ok := activategadget(@YO,w,nil);
{On sort de la hauteur, on rentre dans l'offset en Y}
END;
END;
GADGETDOWN_F : BEGIN
CASE gadgetptr(im^.iaddress)^.gadgetid OF
8 : Puis_Je_Ecrire;{On ecrit le code source}
9 : Complemente;
1 : FReq;
END;
END;
RAWKEY_f : BEGIN
CASE im^.code of
18 : Puis_Je_Ecrire;
20 : ChgTyp;
51 : BEGIN
Complemente;
refreshgadgets(@C,w,nil);
END;
40 : ok := activategadget(@L,w,nil);
37 : ok := activategadget(@H,w,nil);
50 : ok := activategadget(@XO,w,nil);
21 : ok := activategadget(@YO,w,nil);
33 : ok := activategadget(@S,w,nil);
35 : FReq;
69 : {Crapoto basta fuite : au revoir}
quit := EndReq;
{Un petit requester pour verifier si la sortie est voulue...}
END;
END;
END;
replymsg(messageptr(im));
UNTIL quit;
freestring(filename);
FreePCQMem(mytag,sizeof(reqtaglistptr));
CloseLibrary(LibraryPtr(RTBase));
closewindow(w);
END.